package br.ufrpe.bsi.pvs.xml.request;

import java.util.ArrayList;
import java.util.List;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;

import br.ufrpe.bsi.pvs.control.BSFactory;
import br.ufrpe.bsi.pvs.control.roupa.NotasBs;
import br.ufrpe.bsi.pvs.control.roupa.RoupaBs;
import br.ufrpe.bsi.pvs.database.DAOFactory;
import br.ufrpe.bsi.pvs.database.roupa.RoupaDAO;
import br.ufrpe.bsi.pvs.model.roupa.Estilo;
import br.ufrpe.bsi.pvs.model.roupa.Genero;
import br.ufrpe.bsi.pvs.model.roupa.Notas;
import br.ufrpe.bsi.pvs.model.roupa.Roupa;
import br.ufrpe.bsi.pvs.model.roupa.TipoCorporeo;
import br.ufrpe.bsi.pvs.xml.XMLUtil;
import br.ufrpe.bsi.pvs.xml.transformer.QueryXML;

public class QueryRequestProcessor implements RequestProcessor {

	@Override
	public void process(Element clazz) {
		Element classe = clazz.getChild(XMLUtil.ELEM_CLASS);

		Genero g = Genero.getGenero(Integer.parseInt(classe
				.getChildText("genero")));
		double peso = new Double(classe.getChildText("peso"));
		double altura = new Double(classe.getChildText("altura"));
		TipoCorporeo tipoCorporeo = TipoCorporeo.getTipoCorporeo(classe
				.getChildText("tipoCorporeo"));
		Estilo estilo = Estilo.getEstilo(classe.getChildText("estilo"));
		Notas n = new Notas();
		NotasBs nota = BSFactory.getNotasBs();
		n = nota.verificar(peso, altura);
		n.setNota(6);
		// n.setNota(Integer.parseInt(classe.getChildText("nota")));
		
		RoupaBs roupabs = BSFactory.getRoupaBs();
		List<Roupa> roupas = new ArrayList<Roupa>();
		
		if (tipoCorporeo.equals("AMPULHETA")) {
			roupas = roupabs.consultarDicasAmpulheta(estilo, g, n);
		}else if (tipoCorporeo.equals("OVAL")) {
			roupas = roupabs.consultarDicasOval(estilo, g, n);
		}else if (tipoCorporeo.equals("RETANGULO")) {
			roupas = roupabs.consultarDicasRetangulo(estilo, g, n);
		}else if (tipoCorporeo.equals("PERA")) {
			roupas = roupabs.consultarDicasPera(estilo, g, n);
		}else {
			roupas = roupabs.consultarDicasTrianguloInv(estilo, g, n);
		}

		XMLUtil.writeResponse(QueryXML.createResponseDocument(roupas));
	}

	/** generates a default add request xml document */
	public static Document getQueryRequestDocument(String className) {
		Document document = new Document();

		Element root = new Element(XMLUtil.ELEM_ROOT);
		Element clazz = new Element(XMLUtil.ELEM_REQUEST);

		Attribute nomerequest = new Attribute(XMLUtil.ATTR_NAME, XMLUtil.QUERY);
		clazz.setAttribute(nomerequest);
		root.addContent(clazz);

		Element classe = new Element(XMLUtil.ELEM_CLASS);
		Attribute nomeclasse = new Attribute(XMLUtil.ATTR_NAME, className);
		classe.setAttribute(nomeclasse);

		clazz.setContent(classe);
		document.setRootElement(root);

		return document;
	}

}
